home *** CD-ROM | disk | FTP | other *** search
- /* ***** BEGIN LICENSE BLOCK *****
- * Version: MPL 1.1/GPL 2.0/LGPL 2.1
- *
- * The contents of this file are subject to the Mozilla Public License Version
- * 1.1 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- * http://www.mozilla.org/MPL/
- *
- * Software distributed under the License is distributed on an "AS IS" basis,
- * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
- * for the specific language governing rights and limitations under the
- * License.
- *
- * The Original Code is Mozilla.
- *
- * The Initial Developer of the Original Code is
- * Netscape Communications Corporation.
- * Portions created by the Initial Developer are Copyright (C) 2002
- * the Initial Developer. All Rights Reserved.
- *
- * Contributor(s):
- * Darin Fisher <darin@netscape.com>
- *
- * Alternatively, the contents of this file may be used under the terms of
- * either the GNU General Public License Version 2 or later (the "GPL"), or
- * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
- * in which case the provisions of the GPL or the LGPL are applicable instead
- * of those above. If you wish to allow use of your version of this file only
- * under the terms of either the GPL or the LGPL, and not to allow others to
- * use your version of this file under the terms of the MPL, indicate your
- * decision by deleting the provisions above and replace them with the notice
- * and other provisions required by the GPL or the LGPL. If you do not delete
- * the provisions above, a recipient may use your version of this file under
- * the terms of any one of the MPL, the GPL or the LGPL.
- *
- * ***** END LICENSE BLOCK ***** */
-
- #include "nsISupports.idl"
-
- interface nsIInputStream;
- interface nsIOutputStream;
- interface nsITransportEventSink;
- interface nsIEventTarget;
-
- /**
- * nsITransport
- *
- * This interface provides a common way of accessing i/o streams connected
- * to some resource. This interface does not in any way specify the resource.
- * It provides methods to open blocking or non-blocking, buffered or unbuffered
- * streams to the resource. The name "transport" is meant to connote the
- * inherent data transfer implied by this interface (i.e., data is being
- * transfered in some fashion via the streams exposed by this interface).
- *
- * A transport can have an event sink associated with it. The event sink
- * receives transport-specific events as the transfer is occuring. For a
- * socket transport, these events can include status about the connection.
- * See nsISocketTransport for more info about socket transport specifics.
- */
- [scriptable, uuid(cbb0baeb-5fcb-408b-a2be-9f8fc98d0af1)]
- interface nsITransport : nsISupports
- {
- /**
- * Open flags.
- */
- const unsigned long OPEN_BLOCKING = 1<<0;
- const unsigned long OPEN_UNBUFFERED = 1<<1;
-
- /**
- * Open an input stream on this transport.
- *
- * Flags have the following meaning:
- *
- * OPEN_BLOCKING
- * If specified, then the resulting stream will have blocking stream
- * semantics. This means that if the stream has no data and is not
- * closed, then reading from it will block the calling thread until
- * at least one byte is available or until the stream is closed.
- * If this flag is NOT specified, then the stream has non-blocking
- * stream semantics. This means that if the stream has no data and is
- * not closed, then reading from it returns NS_BASE_STREAM_WOULD_BLOCK.
- * In addition, in non-blocking mode, the stream is guaranteed to
- * support nsIAsyncInputStream. This interface allows the consumer of
- * the stream to be notified when the stream can again be read.
- *
- * OPEN_UNBUFFERED
- * If specified, the resulting stream may not support ReadSegments.
- * ReadSegments is only gauranteed to be implemented when this flag is
- * NOT specified.
- *
- * @param aFlags
- * optional transport specific flags.
- * @param aSegmentSize
- * if OPEN_UNBUFFERED is not set, then this parameter specifies the
- * size of each buffer segment (pass 0 to use default value).
- * @param aSegmentCount
- * if OPEN_UNBUFFERED is not set, then this parameter specifies the
- * maximum number of buffer segments (pass 0 to use default value).
- */
- nsIInputStream openInputStream(in unsigned long aFlags,
- in unsigned long aSegmentSize,
- in unsigned long aSegmentCount);
-
- /**
- * Open an output stream on this transport.
- *
- * Flags have the following meaning:
- *
- * OPEN_BLOCKING
- * If specified, then the resulting stream will have blocking stream
- * semantics. This means that if the stream is full and is not closed,
- * then writing to it will block the calling thread until ALL of the
- * data can be written or until the stream is closed. If this flag is
- * NOT specified, then the stream has non-blocking stream semantics.
- * This means that if the stream is full and is not closed, then writing
- * to it returns NS_BASE_STREAM_WOULD_BLOCK. In addition, in non-
- * blocking mode, the stream is guaranteed to support
- * nsIAsyncOutputStream. This interface allows the consumer of the
- * stream to be notified when the stream can again accept more data.
- *
- * OPEN_UNBUFFERED
- * If specified, the resulting stream may not support WriteSegments and
- * WriteFrom. WriteSegments and WriteFrom are only gauranteed to be
- * implemented when this flag is NOT specified.
- *
- * @param aFlags
- * optional transport specific flags.
- * @param aSegmentSize
- * if OPEN_UNBUFFERED is not set, then this parameter specifies the
- * size of each buffer segment (pass 0 to use default value).
- * @param aSegmentCount
- * if OPEN_UNBUFFERED is not set, then this parameter specifies the
- * maximum number of buffer segments (pass 0 to use default value).
- */
- nsIOutputStream openOutputStream(in unsigned long aFlags,
- in unsigned long aSegmentSize,
- in unsigned long aSegmentCount);
-
- /**
- * Close the transport and any open streams.
- *
- * @param aReason
- * the reason for closing the stream.
- */
- void close(in nsresult aReason);
-
- /**
- * Set the transport event sink.
- *
- * @param aSink
- * receives transport layer notifications
- * @param aEventTarget
- * indicates the event target to which the notifications should
- * be delivered. if NULL, then the notifications may occur on
- * any thread.
- */
- void setEventSink(in nsITransportEventSink aSink,
- in nsIEventTarget aEventTarget);
-
- /**
- * Generic nsITransportEventSink status codes. nsITransport
- * implementations may override these status codes with their own more
- * specific status codes (e.g., see nsISocketTransport).
- */
- const unsigned long STATUS_READING = 0x804b0008;
- const unsigned long STATUS_WRITING = 0x804b0009;
- };
-
- [scriptable, uuid(EDA4F520-67F7-484b-A691-8C3226A5B0A6)]
- interface nsITransportEventSink : nsISupports
- {
- /**
- * Transport status notification.
- *
- * @param aTransport
- * the transport sending this status notification.
- * @param aStatus
- * the transport status (resolvable to a string using
- * nsIErrorService). See nsISocketTransport for socket specific
- * status codes and more comments.
- * @param aProgress
- * the amount of data either read or written depending on the value
- * of the status code. this value is relative to aProgressMax.
- * @param aProgressMax
- * the maximum amount of data that will be read or written. if
- * unknown, 0xFFFFFFFF will be passed.
- */
- void onTransportStatus(in nsITransport aTransport,
- in nsresult aStatus,
- in unsigned long long aProgress,
- in unsigned long long aProgressMax);
- };
-